<!--
 *Author：jxx
 *Contact：283591387@qq.com
 *业务请在@/extension/service/sly_databasic/sly_product_materialsmodel.jsx或sly_product_materialsmodel.vue文件编写
 *新版本支持vue或【表.jsx]文件编写业务,文档见:https://v3.volcore.xyz/docs/view-grid、https://v3.volcore.xyz/docs/web
 -->
<template>
    <view-grid ref="grid"
               :columns="columns"
               :detail="detail"
               :details="details"
               :editFormFields="editFormFields"
               :editFormOptions="editFormOptions"
               :searchFormFields="searchFormFields"
               :searchFormOptions="searchFormOptions"
               :table="table"
               :extend="extend"
               :onInit="onInit"
               :onInited="onInited"
               :searchBefore="searchBefore"
               :searchAfter="searchAfter"
               :addBefore="addBefore"
               :updateBefore="updateBefore"
               :rowClick="rowClick"
               :modelOpenBefore="modelOpenBefore"
               :modelOpenAfter="modelOpenAfter">
        <!-- 自定义组件数据槽扩展，更多数据槽slot见文档 -->
        <template #gridHeader>
        </template>
    </view-grid>
</template>
<script setup lang="jsx">
    // 请确保您的 extend 文件路径正确
    import extend from "@/extension/service/sly_databasic/sly_product_materialsmodel.jsx";
    import viewOptions from './sly_product_materialsmodel/options.js'
    import { ref, reactive, getCurrentInstance, watch, onMounted } from "vue";

    const grid = ref(null);
    const { proxy } = getCurrentInstance()
    //http请求，proxy.http.post/get
    const { table, editFormFields, editFormOptions, searchFormFields, searchFormOptions, columns, detail, details } = reactive(viewOptions())

    let gridRef;//对应[表.jsx]文件中this.使用方式一样

    // 辅助函数：根据"群组类型"字段的值来控制"工艺路线"字段的显示与隐藏
    const updateProcessRouteVisibility = (Product_GroupType) => {
        // 确保 gridRef 已初始化
        if (!gridRef) {
            console.warn("[调试信息][产品物料] gridRef 未初始化，无法更新字段可见性。");
            return;
        }

        // 查找 'Product_Processroute' (工艺路线) 的配置选项
        const allFormOptions = gridRef.editFormOptions.flat();
        const processRouteFieldOption = allFormOptions.find(f => f.field === 'Product_Processroute');

        // ****** 关键调试日志：打印 Product_GroupType 的类型和值 ******
        console.log(`[调试信息][产品物料][updateVisibility] 传入的 Product_GroupType: "${Product_GroupType}" (类型: ${typeof Product_GroupType})`);

        if (processRouteFieldOption) {
            // ****** 核心修改点：这里根据实际的字符串 key 值进行判断 ******
            // **请务必根据您实际的"物料类型"字典数据，确认"原材料"、"成品"、"半成品"对应的字符串 key 值！**
            // 假设"原材料"的 key 是 "0"，"半成品"的 key 是 "2"
            // 当 Product_GroupType 是 "原材料" 或 "半成品" 时显示，否则隐藏
            const isVisible = (Product_GroupType === '0' || Product_GroupType === '2'); // 修改为与字符串 key 比较

            // ****** 关键修改：使用 hidden 属性来控制可见性 ******
            const originalHidden = processRouteFieldOption.hidden; // 记录原始 hidden 值
            processRouteFieldOption.hidden = !isVisible; // 设置隐藏状态 (true 表示隐藏，false 表示显示)

            // Product_Processroute 在 options.js 中未设置为 required:true, 所以这里不需要动态设置 required
            // 如果需要根据可见性设置必填，请取消注释此行，并根据业务逻辑调整
            // processRouteFieldOption.required = isVisible;

            // ****** 关键调试日志：打印字段的最终可见性状态 ******
            console.log(`[调试信息][产品物料][updateVisibility] isVisible 计算结果: ${isVisible}`);
            console.log(`[调试信息][产品物料][updateVisibility] 'Product_Processroute' 字段的原始 hidden 状态: ${originalHidden}`);
            console.log(`[调试信息][产品物料][updateVisibility] 'Product_Processroute' 字段的最终 hidden 状态: ${processRouteFieldOption.hidden}`);
            // 打印深拷贝以避免 Proxy 问题，有助于查看实际属性值
            console.log("[调试信息][产品物料][updateVisibility] processRouteFieldOption 的最终状态 (深拷贝):", JSON.parse(JSON.stringify(processRouteFieldOption)));
        } else {
            console.warn("未能找到 'Product_Processroute' 字段的表单配置选项。请检查 options.js 中 field 名称是否正确。");
        }
    };

    //生成对象属性初始化
    const onInit = async ($vm) => {
        gridRef = $vm;
        // ****** 关键调试日志：打印 editFormOptions 在 onInit 时的初始状态 ******
        console.log("[调试信息][产品物料][onInit] editFormOptions 初始状态:", JSON.parse(JSON.stringify(gridRef.editFormOptions)));

        // 监听"群组类型"字段的变化，其 field 为 'Product_GroupType'
        watch(() => gridRef.editFormFields.Product_GroupType, (newValue, oldValue) => {
            console.log(`[调试信息][产品物料][watch] Product_GroupType 变化: 从 "${oldValue}" 到 "${newValue}"`);
            updateProcessRouteVisibility(newValue);
            // ****** 关键调试日志：打印 editFormOptions 在 watch 变化后的状态 ******
            console.log("[调试信息][产品物料][watch] editFormOptions 变化后状态:", JSON.parse(JSON.stringify(gridRef.editFormOptions)));
        }, { immediate: true }); // immediate: true 确保组件加载时也执行一次
    }
    //生成对象属性初始化后,操作明细表配置用到
    const onInited = async () => {
    }
    const searchBefore = async (param) => {
        //界面查询前,可以给param.wheres添加查询参数
        //返回false，则不会执行查询
        return true;
    }
    const searchAfter = async (rows, result) => {
        return true;
    }
    const addBefore = async (formData) => {
        //新建保存前formData为对象，包括明细表，可以给给表单设置值，自己输出看formData的值
        return true;
    }
    const updateBefore = async (formData) => {
        //编辑保存前formData为对象，包括明细表、删除行的Id
        return true;
    }
    const rowClick = ({ row, column, event }) => {
        //查询界面点击行事件
        // grid.value.toggleRowSelection(row); //单击行时选中当前行;
    }
    const modelOpenBefore = async (row) => {//弹出框打开后方法
        return true;//返回false，不会打开弹出框
    }
    const modelOpenAfter = (row) => {
        //弹出框打开后方法,设置表单默认值,按钮操作等
        if (gridRef && gridRef.editFormFields) {
            // ****** 关键调试日志：打印 editFormFields 的完整内容 ******
            console.log("[调试信息][产品物料][modelOpenAfter] editFormFields 的完整内容 (初始):", JSON.parse(JSON.stringify(gridRef.editFormFields)));

            // 在新增模式下，如果 Product_GroupType 未定义或为空字符串，设置一个默认值
            if (!row) { // `!row` 表示是新增操作
                // Product_GroupType 初始值是 ""
                if (gridRef.editFormFields.Product_GroupType === "" || gridRef.editFormFields.Product_GroupType === undefined || gridRef.editFormFields.Product_GroupType === null) {
                    // **请务必根据您实际的"物料类型"字典数据，确认您希望的默认群组类型（如"原材料"）对应的字符串 key 值！**
                    // 假设"原材料"的 key 值是 "0"，如果不是，请替换为实际值。
                    gridRef.editFormFields.Product_GroupType = '0'; // <-- 设置一个默认的字符串 key 值
                    console.log(`[调试信息][产品物料] 新增模式下，Product_GroupType 被设置为默认 key: "${gridRef.editFormFields.Product_GroupType}"`);
                }

                // ****** 为 Product_Group 字段设置默认值以避免必填错误 ******
                // Product_Group 初始值也是 ""，且 required:true，所以需要设置默认值
                if (gridRef.editFormFields.Product_Group === "" || gridRef.editFormFields.Product_Group === undefined || gridRef.editFormFields.Product_Group === null) {
                    // **请务必根据您实际的"物料群组"字典数据，确认您希望的默认群组对应的字符串 key 值！**
                    // 假设默认群组的 key 值是 "0"，如果不是，请替换为实际值。
                    gridRef.editFormFields.Product_Group = '0'; // <-- 设置一个默认的群组 key 值
                    console.log(`[调试信息][产品物料] 新增模式下，Product_Group 被设置为默认 key: "${gridRef.editFormFields.Product_Group}"`);
                }
            }

            const currentGroupType = gridRef.editFormFields.Product_GroupType; // 获取当前 Product_GroupType 的值
            updateProcessRouteVisibility(currentGroupType); // 更新 Product_Processroute 的可见性
            console.log("[调试信息][产品物料][modelOpenAfter] editFormFields 的完整内容 (最终):", JSON.parse(JSON.stringify(gridRef.editFormFields)));
        }
    }
    //监听表单输入，做实时计算
    //watch(() => editFormFields.字段,(newValue, oldValue) => {	})
    //对外暴露数据
    defineExpose({})
</script>
<style lang="less" scope>
</style>
